package com.ehsy.statement;

import com.dtflys.forest.http.ForestCookie;
import com.dtflys.forest.http.ForestResponse;
import com.ehsy.model.UserInfo;
import com.ehsy.service.CookieService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.util.concurrent.atomic.AtomicReference;

/**
 * @author YanZhen_Li
 * @version 1.0
 * @title V19Cookie的使用
 * @description
 * @create 2024/6/19 15:01
 */
@SpringBootTest
public class A19Cookie的使用 {
    @Resource
    CookieService service;
    /**
     * 回调函数方式设置cookie
     */
    @Test
    public void test1() {
        UserInfo user = new UserInfo("张三", "18", "男", "上海", "13812341234", "123@qq.com", "123456");
        AtomicReference<ForestCookie> cookieAtomic = new AtomicReference<>(null);
        service.test1((request, cookies) -> {
            // orest不会自动处理或持久化服务端传来的Cookie数据，需要自己在回调函数中接到Cookie后自行处理。
            System.out.println(cookies);
            cookieAtomic.set(cookies.allCookies().get(0));
        });
        System.out.println(cookieAtomic);
        // 获取cookie
        ForestCookie cookie = cookieAtomic.get();

        // 调用其他需要cookie的接口(向请求的接口中放入cookie)
        ForestResponse<String> response = service.test2((request, cookies) -> {
            // 将之前调用登入接口获得的Cookie传入请求发送到服务端
            cookies.addCookie(cookie);
        });
        String responseStr = response.getResult();
        System.out.println(responseStr);
    }

    /**
     * ! 拦截器设置cookie方式
     */
    /**
     * ! 拦截器设置 之 严格匹配模式
     * 默认情况下，只有符合条件 (和请求同域名、同URL路径、未过期) 的 Cookie 才能被添加到请求中
     * 这是因为 Forest 的 Cookie 集合默认为严格匹配模式，如果想添加符合匹配要求的 Cookie，只需修改严格匹配为false即可
     */
}
